package org.ilc.task;

import org.ilc.push.Task;

import java.util.LinkedList;

/**
 * 任务队列
 * @author malongbo
 */
public class Queue {

    //请求队列
    private final LinkedList<Task> queue = new LinkedList<Task> ();

    /**
     * 同步取出队列中的任务
     * @return Task
     */
    public synchronized Task getTask() {
        /*
        如果队列为空，则当前线程进入等待池中
         */
        while (queue.size () <=0) {
            try {
                System.out.println ("get task wait.");
                wait ();
            } catch (InterruptedException e) {
                e.printStackTrace ();
            }
        }
        //取出任务
        Task task = queue.removeFirst ();
        System.out.println ("get task " + task);
        return task;
    }

    /**
     * 同步向队列中加入任务
     * @param task
     */
    public synchronized void putTask (Task task) {
        queue.addLast (task);
        System.out.println ("put task " + task);
        notifyAll ();
    }
}
